package com.lb.base.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 捣蛋值领取档位枚举
 *
 * @author libin
 */
@Getter
@AllArgsConstructor
public enum TrickGearTypeEnum {

    /**
     * 未知档位
     */
    UNKNOWN(-1, 0, "未知档位"),
    /**
     * 保守档位1
     */
    GEAR_1(10, 0, "保守档位1"),
    /**
     * 保守档位2
     */
    GEAR_2(20, 0, "保守档位2"),
    /**
     * 保守档位3
     */
    GEAR_3(30, 0, "保守档位3"),
    /**
     * 冒险档位1
     */
    GEAR_4(40, 100, "冒险档位1"),
    /**
     * 冒险档位2
     */
    GEAR_5(50, 200, "冒险档位2"),
    /**
     * 冒险档位3
     */
    GEAR_6(60, 300, "冒险档位3"),
    /**
     * 冒险档位4
     */
    GEAR_7(70, 400, "冒险档位4"),
    ;

    /**
     * 档位类型
     */
    private Integer type;
    /**
     * 档位
     */
    private Integer amount;
    /**
     * 描述
     */
    private String desc;

    /**
     * 根据类型返回对应枚举对象
     */
    public static TrickGearTypeEnum parse(Integer type) {
        return Optional.ofNullable(type)
                .map(i -> Arrays.stream(TrickGearTypeEnum.values())
                        .filter(e -> i.equals(e.type)).findFirst()
                        .orElse(UNKNOWN))
                .orElse(UNKNOWN);
    }

    /**
     * 冒险区档位集合
     */
    public static List<Integer> adventureAmountList() {
        return Arrays.stream(TrickGearTypeEnum.values()).map(TrickGearTypeEnum::getAmount).filter(e -> e >= 100).sorted().collect(Collectors.toList());
    }

    /**
     * 冒险区档位类型集合
     */
    public static List<Integer> adventureTypeList() {
        return Arrays.stream(TrickGearTypeEnum.values()).map(TrickGearTypeEnum::getType).filter(e -> e >= 40).sorted().collect(Collectors.toList());
    }

}
